#include<iostream>
#include<unistd.h>//sleep,getpid
#include<string>//string
#include<pthread.h>//pthread_create

void* threadrun(void* args)//线程要执行的虚拟地址(方法),参数必须是void*
{
    std::string name = (const char*) args;//将传入的参数按格式强转
    while(true)
    {
        sleep(1);
        std::cout << "我是新线程: name: " << name <<" , pid: " << getpid() << std::endl;
        //int a = 10;
        //a /= 0;//会报错
        
    }
    return nullptr;
}
int main()
{
    pthread_t tid;//用来通过输出型参数获取线程ID
    int n = pthread_create(&tid,nullptr,threadrun,(void *) "thread -1");//只能穿给方法传一个参数,不想传参设置为null
    //成功返回0,失败返回错误码
    if(n != 0)
    {
        std::cout << "pthread_create error : " << n << std::endl;
        exit(1);
    }
    while(true)
    {
        std::cout << "我是主线程..., pid: " << getpid() << std::endl;
        sleep(1);
    }
    return 0;
}

//代码的结论
//线程和进程使用同一个pid,进程一但结束进程线程都不存在了
//使用ps -aL命令可以看到该进有两个执行流,LWP是轻量级进程号
//该程序提现了不同的线程可以执行不同的虚拟地址的资源
//任何一个线程崩溃都会导致进程崩溃(因为线程也是进程的一部分)